package navalgo3.Modelo;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;

public class Tablero{
	
	private ArrayList<Nave> navesEnJuego;
	private ArrayList<Mina> minasColocadas;
	private ArrayList<Disparo> disparosHechos;
	
	public Tablero(){
		
		this.navesEnJuego = new ArrayList<Nave>();
		this.minasColocadas = new ArrayList<Mina>();
		this.disparosHechos = new ArrayList<Disparo>();
		/*ArrayList<Nave> navesIniciales = FabricaDeNaves.generarNaves();
		for (Nave naveActual : navesIniciales){
			this.colocarNave(naveActual);
		} */
	
	}
	
	public void colocarNave(Nave nuevaNave){
		this.navesEnJuego.add(nuevaNave);
		
	}
	
	public void colocarMina(Mina nuevaMina){
		this.minasColocadas.add(nuevaMina);
	}
	
	public void colocarDisparo(Disparo nuevoDisparo){
		this.disparosHechos.add(nuevoDisparo);
	}
	
	public void moverNaves(){
		for(Nave naveActual : this.navesEnJuego){
			naveActual.mover();
		}
	}
	
	public void disminuirTiempoAMinas(){
		for(Mina minaActual : this.minasColocadas){
			minaActual.disminuirTiempo();
		}
	}
	
	public void removerMinasExplotadas(){
		Iterator iterador = minasColocadas.iterator();
		while (iterador.hasNext()){
			Mina minaActual = (Mina) iterador.next();
			if (minaActual.estaExplotada){
				iterador.remove();
			}
		}
		
	}

	public void removerDisparos(){
		disparosHechos.clear();
	}
	
	public ArrayList<Nave> getNaves(){
		return this.navesEnJuego;
	}
	
	public ArrayList<Mina> getMinasColisionables(){
		ArrayList<Mina> minasColisionables = new ArrayList<Mina>();
		for(Mina minaActual : this.minasColocadas){
			if ( (minaActual.exploto()) || (minaActual.getTiempo()<0) ){      
				minasColisionables.add(minaActual);
			}
		}

		return minasColisionables;
	}
	
	public ArrayList<Disparo> getDisparos(){
		return this.disparosHechos;
	}

	public boolean tieneMinaEn(Posicion posicion) {
		boolean encontrada = false;
		for (Mina minaActual : minasColocadas){
			if (minaActual.getPosicion().equals(posicion)){
				encontrada = true;
			}
		}
		return encontrada;
	}
	
	public boolean tieneNaveEn(Posicion posicion){
		boolean encontrada = false;
		for (Nave naveActual : navesEnJuego){
			if (naveActual.tieneParteEn(posicion)){
				encontrada = true;
			}
		}
		return encontrada;
	}

	public boolean tieneDisparoEn(Posicion posicion) {
		boolean encontrado = false;
		for (Disparo disparoActual : disparosHechos){
			if (disparoActual.getPosicion().equals(posicion)){
				encontrado = true;
			}
		}
		return encontrado;
	}

	public boolean hayNaves() {
		return (this.navesEnJuego.size()!=0);
	}
}